﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Collections.ObjectModel;
using elr_tracking_bal.ART;
using elr_tracking_bal.CAT;
using elr_tracking_bal.POM;
using elr_tracking_bal;

namespace elr_tracking_wpf
{
    
    /// <summary>
    /// Lógica de interacción para pom.xaml
    /// </summary>
    public partial class pom : UserControl
    {
        public ObservableCollection<VisibleArticulo> obs;
        public ObservableCollection<VisibleArticulo> articulos_dg;
        public ObservableCollection<ListaITEM> articulos_dg2;
        public ObservableCollection<ListaITEM> articulos_dg2_total;
        public ObservableCollection<Proveedor> proveedores;
        public ObservableCollection<Empresa> empresas;
        private ScrollViewer svContainer;
        public string id;

        public int ID_POM;
        public int ID_Lote;
        public int Proveedor;

        public pom(){

            InitializeComponent();


            empresas = Empresa.GetDataEmpresa();
            this.cb_Empresa.ItemsSource = empresas;
            this.cb_EmpresaEmbarque.ItemsSource = empresas;

            proveedores = elr_tracking_bal.CAT.Proveedor.GetNombreProveedor();
            this.cb_Proveedor.ItemsSource = proveedores;
        }

        public pom(int ID_POM, int ID_Lote)
        {
            InitializeComponent();

            //Se inicializa Proveedor con 1 con fin de pruebas solamente
            this.Proveedor = 1;
            this.ID_Lote = 1;
            this.ID_POM = 1;

            this.comboPedimentos.ItemsSource = GetCombos.GetPedimentos();
            this.comboPedimentos.SelectedIndex = 0;

            empresas = Empresa.GetDataEmpresa();
            this.cb_Empresa.ItemsSource = empresas;
            this.cb_EmpresaEmbarque.ItemsSource = empresas;

            proveedores = elr_tracking_bal.CAT.Proveedor.GetNombreProveedor();
            this.cb_Proveedor.ItemsSource = proveedores;

            this.Proveedor = Convert.ToInt32(this.cb_Proveedor.SelectedValue);

            articulos_dg = new ObservableCollection<VisibleArticulo>();
            this.dataGrid1.ItemsSource = articulos_dg;

            articulos_dg2 = new ObservableCollection<ListaITEM>();
            articulos_dg2_total = new ObservableCollection<ListaITEM>();
            this.dataGrid2.ItemsSource = articulos_dg2;


            ClaseItems ci = new ClaseItems(this.ID_Lote, this.ID_POM, this.Proveedor);

            List<VisibleArticulo> ListGrid1 = new List<VisibleArticulo>();
            List<ListaITEM> ListGrid2 = new List<ListaITEM>();

            ListGrid1 = ci.LlenarGrid1();
            ListGrid2 = ci.LlenarGrid2();
            
            for (int i = 0; i < ListGrid1.Count; i++)
            {
                articulos_dg.Add(ListGrid1[i]);
            }

            for(int i = 0; i < ListGrid2.Count; i++){
            
                articulos_dg2_total.Add(ListGrid2[i]);
            }

            obs = new ObservableCollection<VisibleArticulo>();
            obs = VisibleArticulo.GetDataArticulo(Proveedor);

            for (int i = 0; i < ListGrid1.Count; i++)
            {
                for (int j = 0; j < obs.Count;)
                {
                    if (obs[j].ARTICULO.Equals(ListGrid1[i].ARTICULO))
                        obs.RemoveAt(j);
                    else
                        j++;
                }
            }
        }
        
        public pom(ScrollViewer svContainer)
        {
            // TODO: Complete member initialization
            this.svContainer = svContainer;
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            Articulo o = this.FindResource("elementos") as Articulo;
            o.PropertyChanged += delegate(object sender2, PropertyChangedEventArgs args)
            {
                Console.WriteLine(args.PropertyName);
            };          
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {

            Proveedor = Convert.ToInt32(this.cb_Proveedor.SelectedValue);

            ClaseItems ci = new ClaseItems(this.ID_Lote, this.ID_POM, this.Proveedor);

            List<VisibleArticulo> ListGrid1 = new List<VisibleArticulo>();
            List<ListaITEM> ListGrid2 = new List<ListaITEM>();

            ListGrid1 = ci.LlenarGrid1();
            ListGrid2 = ci.LlenarGrid2();

            //for (int i = 0; i < ListGrid1.Count; i++)
            //{
            //    articulos_dg.Add(ListGrid1[i]);
            //}

            for (int i = 0; i < ListGrid2.Count; i++)
            {

                articulos_dg2_total.Add(ListGrid2[i]);
            }

            obs = new ObservableCollection<VisibleArticulo>();
            obs = VisibleArticulo.GetDataArticulo(Proveedor);

            for (int i = 0; i < articulos_dg.Count; i++)
            {
                for (int j = 0; j < obs.Count; )
                {
                    if (obs[j].ARTICULO.Equals(articulos_dg[i].ARTICULO))
                        obs.RemoveAt(j);
                    else
                        j++;
                }
            }



            Agregar_Articulo agregar = new Agregar_Articulo(obs, this);
            agregar.Show();   
        }

        private void button3_Click(object sender, RoutedEventArgs e)
        {
            ClaseItems ci = new ClaseItems();

            //Para fines de pruebas
            ci.ID_Lote = this.ID_Lote;
            ci.ID_POM = this.ID_POM;
            ci.ID_Proveedor = this.Proveedor;
            
            string campo = "";
            Double aux = 0;

            try {
            
                campo = "Lote";
                if (textBox1.Text.Equals(""))
                {
                    MessageBox.Show("El campo " + campo + "  está vacio.");
                    return;
                }
                
                campo = "Factura";
                if (textBox2.Text.Equals(""))
                {
                    MessageBox.Show("El campo " + campo + "  está vacio.");
                    return;
                }

                campo = "PedimentoImporte";
                aux = Double.Parse(this.textBox3.Text);
                campo = "IVAFactura";
                aux = Double.Parse(this.textBox6.Text);
                campo = "Pedimento";
                aux = Double.Parse(this.textBox4.Text);
                campo = "% IVA Compra";
                aux = Double.Parse(this.textBox7.Text);
                campo = "Total Factura";
                aux = Double.Parse(this.textBox8.Text);

            } catch(Exception Ex){

                MessageBox.Show("El campo " + campo + " contiene caracteres inválidos o está vacio.");
                return; 
            }
            
            //Por el momento ya se pasarán los parámetros para las pruebas
            //if (ID_POM == 0 || ID_Lote == 0)
            //{
                
            //    LotNombre = this.txt_Lote.Text;
            //    LotNombre.Trim();

            //    LotPedimento = this.comboPedimentos.SelectedValue.ToString();
            //    LotPedimento.Trim();

            //    POMSerial = this.comboPoms.SelectedValue.ToString();
            //    POMSerial.Trim();

            //    List<string> ListaNLotes = new List<string>();
            //    ListaNLotes = ci.getLotesNames();

            //    bool auxVerifica = false;

            //    for (int i = 0; i < ListaNLotes.Count; i++) {

            //        if (ListaNLotes[i].Equals(LotNombre))
            //            auxVerifica = true;
            //    }

            //    if (auxVerifica)
            //    {

            //        MessageBox.Show("El nombre de Lote ya ha sido ingresado, favor de ingresar uno diferente.");
            //        return;
            //    }
            //    else {

            //        ci.IngresarNuevoLote(POMSerial, LotNombre, LotPedimento);
            //    }
            //}
            
            List<ListaITEM> ListaFinal = new List<ListaITEM>();
            this.textBox5.Text = "0";
            for(int i = 0; i < articulos_dg2_total.Count; i++){

                ListaITEM ItemAux = new ListaITEM();
                //Por cuestiones de pruebas ID_Track = 1 ID_Item = 1
                
                ItemAux.ID_Item = 1;
                ItemAux.ID_Track = 1;
                ItemAux.Serie = articulos_dg2_total[i].Serie;
                ItemAux.Sku = articulos_dg2_total[i].Sku;
                ItemAux.Costo_Final = articulos_dg2_total[i].Costo_Final;
                ItemAux.Is_Arrendado = articulos_dg2_total[i].Is_Arrendado;
                
                //ItemAux.ID_Lot_Art = 1;

                ItemAux.ID_Articulo = articulos_dg2_total[i].ID_Articulo;
                ItemAux.Nombre_Articulo = articulos_dg2_total[i].Nombre_Articulo;
                ItemAux.Cantidad = articulos_dg2_total[i].Cantidad;
                ItemAux.costoU = articulos_dg2_total[i].costoU;
                ItemAux.IVA = articulos_dg2_total[i].IVA;

                ItemAux.ID_Moneda = articulos_dg2_total[i].ID_Moneda;
                ItemAux.Moneda = articulos_dg2_total[i].Moneda;
                ItemAux.descuento = articulos_dg2_total[i].descuento;
                ItemAux.TC = articulos_dg2_total[i].TC;
                ItemAux.ID_Item = articulos_dg2_total[i].ID_Item;
                
                ListaFinal.Add(ItemAux);
                //txt Importe de la Factura            
                if (!this.textBox5.Text.ToString().Equals(""))
                    this.textBox5.Text = (Double.Parse(this.textBox5.Text.ToString()) + articulos_dg2_total[i].costoU).ToString();
                else 
                    this.textBox5.Text = articulos_dg2_total[i].costoU.ToString();
            }

            ci.ListaRecibida = ListaFinal;
            ci.importe_f = (float)(Double.Parse(this.textBox5.Text.ToString()));
            ci.factura = textBox2.Text.ToString();
            ci.insertITEM();
        }

        private void guarda_POM()
        {
            string pomSerial = txt_PomSerial.Text.ToString();
            DateTime fechaPom = dp_FechaPom.SelectedDate.Value;
            int idEmpresa = Convert.ToInt32(cb_Empresa.SelectedValue);
            int diasEntrega = Convert.ToInt32(txt_DiasEntrega.Text.ToString());
            string fechaPoms = fechaPom.ToString("MM/dd/yyyy"); 
            DateTime fechaEntrega = dp_FechaEntrega.SelectedDate.Value;
            DateTime fechaEntregaR = dp_FechaEntregaR.SelectedDate.Value;
            int prov = Convert.ToInt32(cb_Proveedor.SelectedValue);
            int emb = Convert.ToInt32(cb_EmpresaEmbarque.SelectedValue);

            POM obpom = new POM(fechaPom, 0, idEmpresa, diasEntrega, fechaEntrega, fechaEntregaR, prov, emb, pomSerial);
            obpom.ID_POM = POM.InsertPOM(obpom);
            Console.WriteLine("hola");
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            for (int i = 0; i < articulos_dg.Count; )
            {
                if (articulos_dg[i].ISCHECKED == true)
                {
                    for (int j = 0; j < articulos_dg2_total.Count;) {

                        if (articulos_dg2_total[j].Nombre_Articulo.Equals(articulos_dg[i].ARTICULO))
                        {
                            articulos_dg2_total.RemoveAt(j);
                        }
                        else {

                            j++;
                        }
                    }

                    bool aux = false;
                    for (int j = 0; j < obs.Count; j++) {
                        if (obs[j].ARTICULO.Equals(articulos_dg[i].ARTICULO))
                            aux = true;
                    }

                    if(!aux)
                        obs.Add(articulos_dg[i]);
                    articulos_dg.RemoveAt(i);
                }
                else {

                    i++;
                }
            }
        }
        private void txt_Lote_TextChanged(object sender, TextChangedEventArgs e)
        {

        }
        
        private void RowCheckBox_Click(object sender, RoutedEventArgs e)
        {
            BindingExpression be = ((CheckBox)sender).GetBindingExpression(CheckBox.IsCheckedProperty);
            be.UpdateSource();
        }

        private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
        {

            for (int y = 0; y < articulos_dg.Count; y++)
            {
                articulos_dg[y].PropertyChanged += delegate(object sender2, PropertyChangedEventArgs args)
                {

                    articulos_dg2 = new ObservableCollection<ListaITEM>();
                    for (int i = 0; i < articulos_dg.Count; i++)
                    {
                        if (articulos_dg[i].ISCHECKED)
                        {
                            for (int k = 0; k < articulos_dg2_total.Count; k++)
                            {
                                if (articulos_dg2_total[k].ID_Articulo == articulos_dg[i].ID_ARTICULO)
                                    articulos_dg2.Add(articulos_dg2_total[k]);
                            }
                        }
                    }
                    this.dataGrid2.ItemsSource = articulos_dg2;                 
                };
            }            
        }
        private void CheckBox_Checked(object sender, RoutedEventArgs e)
        {

        }

        private void textBox5_TextChanged(object sender, TextChangedEventArgs e)
        {

        }
    }
}
